﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using itau.im.entidade;
using EnterpriseLibraryWrapper;

namespace itau.im.negocio
{

    [ServiceContract]
    public interface ICurvaBS
    {

        #region Metodos

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        List<Curva> ObterCurvasPorCodigoGrupoParametros(int codigoGrupoParametro, DateTime dataBase);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterCurvasPorTipoEntradaDado(int codTipoEntradaDado);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        int CriarRegistroExecucaoCurvaPontos(RegistroExecucaoCurva registroExecucaoCurva);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<GradeExecucaoCurva> ObterGradesExecucaoCurvasAtivas(TimeSpan horaUltimaExecucao, TimeSpan proximaExecucao);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        CurvaVigente ObterCurvaVigente(int curvaID);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        CurvaVigente ObterCurvaVigentePorDataReferencia(int curvaID, DateTime dataReferencia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        CurvaVigente ObterCurvaBulletAssociada(int codigoCurvaPMT);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TipoCurva> ObterTiposCurva();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Situacao> ObterSituacoes();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TipoTaxa> ObterTiposTaxa();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TipoEntradaDado> ObterTiposEntradaDado();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        Curva ObterCurva(int curvaID);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        Curva ObterCurvaDefault();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<ModalidadeCurva> ObterModalidadesCurva();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TaxaPontoCurva> ObterVerticesInterpolacao();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TaxaPontoCurvaVigente> ObterMetodosInterpolacaoCurva(int codigoCurva, DateTime inclusaoVigencia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<CategoriaMercado> ObterCategoriasMercado();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TipoPrazo> ObterTiposPrazo();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TaxaPontoCurva> ObterMetodosExtrapolacao();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<ModeloCalculo> ObterModelosCalculo();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TaxaPontoCurva> ObterMetodosAntepolacao();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterCurvas();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Cotacao> ObterCotacoes();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TaxaPontoCurva> ObterMetodosInterpolacao();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<GradeExecucaoCurva> ObterGradesExecucaoCurva();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        int ObterMaximoExtensaoDiasCurva(int codigoCurva);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void CriarCurva(Curva curva);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void RemoverCurva(Curva curva);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void AtualizarCurva(Curva curva);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void AtualizarCurvaDefault(int curvaDefault);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        Curva ObterCurvaPorNomeInterno(string nomeInterno);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterCurvasLiberadasPorDataTipoModalidade(DateTime dataExecucao, int tipoCurva, int modalidade);

        void ConverterParametroModeloIntervaloToleranciaEmVertice(IList<ParametroModeloIntervaloTolerancia> listaParametroModeloIntervaloTolerancia,
                                                                         DateTime dataInicio, IList<CurvaExecucaoPonto> limiteInferior,
                                                                         IList<CurvaExecucaoPonto> limiteSuperior, IList<CurvaExecucaoPonto> listaPontosCurva);
        
        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        ModeloIntervaloTolerancia ObterIntervaloTolerancia(int modeloID);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<CurvaVigente> ObterCurvasVigentes(IList<Curva> listaCurvas);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<TipoAcaoRetencaoCurva> ObterAcoesRetencaoCurva();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterFatoresCurva(int codigoCurva, DateTime dataInclusaoVigencia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<CurvaVigente> ObterCurvasVigentePorTipoMesaOrigemCategoria(int mesaID, int tipoCurvaID, int categoriaID, int codigoSituacaoAtiva, int codigoSituacaoPendente);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterCurvasVigentePorTipoMesaOrigemCategoriaTipoEntrada(int codigoSubmesa, int codigoTipoCurva,
            int codigoCategoriaMercado, int codigoSituacaoAtiva, int codigoSituacaoPendente, int codigoTipoEntradaDado);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterCurvasRetidasPorTipoMesaCategoriaSituacao(int tipoCurvaID, int subMesaID, int categoriaMercadoID, int codigoSituacao);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<CurvaVigente> ObterCurvasCompostasVigentesPeloFator(int codigoCurvaComponente);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        int ObterMinimoAnosExtensaoCurvas(IList<Curva> curvas);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<ModeloIntervaloTolerancia> ObterIntervalosTolerancia();

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        ImportacaoArquivo ObterDadosArquivoImportacao(int codigoCurva, DateTime dataInclusaoVigencia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void AtualizarCurvaVigente(CurvaVigente curvaVigente);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<ParametroModeloIntervaloTolerancia> ObterParametrosModeloIntervaloTolerancia(int codigoModelo);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void CriarIntervaloTolerancia(ModeloIntervaloTolerancia modeloIntervaloTolerancia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void AtualizarIntervaloTolerancia(ModeloIntervaloTolerancia modeloIntervaloTolerancia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        void RemoverIntervaloTolerancia(int codigoModeloIntervaloTolerancia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        ComposicaoCurva ObterCurvaComposicaoVigente(int codigoCurva, DateTime dataInclusaoVigencia);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<CurvaVigente> ObterCurvasVigentesPMT(int codigoCurvaPMT);

        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterCurvasVigentePorTipoMesaOrigemCategoriaTipoEntradaFacultativo(int codigoSubmesa, int codigoTipoCurva,
        int codigoCategoriaMercado, int codigoSituacaoAtiva, int codigoSituacaoPendente, int codigoTipoEntradaDado);

        int ObterMaximoDiasExtensaoCurva();

        //URICK 25/10/2012
        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        IList<Curva> ObterTodasCurvasParaSelecaoEnvioTesouraria();

        //URICK 26/10/2012
        [OperationContract]
        [FaultContract(typeof(WCFFaultContract))]
        bool SelecionarCurvasParaEnvioTesouraria(IList<Curva> curvas);

        #endregion
    }
}
